package com.study.module.log;

import java.lang.annotation.*;


/**
 * 打印方法调用及入参的注解。默认使用json格式
 * 将此注解标记到方法上就可以使用统一的格式打印方法调用
 * 注意事项:
 * 1. 继承父类或者实现接口会使此注解失效，要重新标记
 * 2. 对于无法序列化为json的类型（比如HttpServletRequest），
 * 需要在excludes中指定排除，或者在toStrings中指定使用toString替换json
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LogParams {

    /**
     * 排除类型。
     * 指定在这个集合里的类型将不会序列化到日志中
     * 用于排除一些不需要打印的类型
     *
     * @return 被排除的类型的集合
     */
    Class<?>[] excludes() default {};

    /**
     * 使用toString打印日志的类型。
     * 指定在这个集合里的类型将会使用toString替换json序列化
     * 用于替换无法序列化为json但需要打印的类型。
     *
     * @return 使用toString的类型集合
     */
    Class<?>[] toStrings() default {};
}
